package com.qf.hello.spring.entiry;

import com.qf.hello.spring.rent.Fangdong;
import com.qf.hello.spring.rent.FangdongTarge;
import org.junit.jupiter.api.Test;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

import java.lang.reflect.Method;

public class MyTest2 {


    @Test
    void testCgLibProxy(){
        final FangdongTarge fangdong=new FangdongTarge();
        Enhancer enh=new Enhancer();//1.创建字节码增强对象
        enh.setSuperclass(fangdong.getClass());//设置父类(等价于实现原始类接口)
        enh.setCallback(new InvocationHandler() {//3.设置回调函数（额外功能代码）
            @Override
            public Object invoke(Object o, Method method, Object[] args) throws Throwable {
                // 中介要干的事情
                System.out.println("发布房源信息");
                System.out.println("带租户看房");
                Object ret = method.invoke(fangdong,args);
                // 中介要干的事情
                System.out.println("给租户安排入住");
                return ret;
            }
        });
        Fangdong proxy = (Fangdong)enh.create();//4.创建动态代理类
        proxy.rentHouse();

    }

}
